﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;

namespace ECommerce.WebControls.Productos
{
    public partial class WebDropDownFamilias : System.Web.UI.WebControls.DropDownList 
    {
        public ECommerce.Model.Productos.Familia FamiliaSeleccionada
        {
            set { this.SeleccionarFamililia(value); }
            get
            {
                ECommerce.Model.Productos.Familia result = new ECommerce.Model.Productos.Familia();
                if (this.Items != null)
                    if (this.Items.Count > 0)
                        if (this.Items[0].Value!="" && this.Items[0].Value!="X" && this.Items[0].Value!="0")
                            result.Load(Convert.ToInt32(this.Items[0].Value));
                    else
                        result = null;
                else
                    result = null;
                return result;
            }
        }
        public void SeleccionarFamililia(ECommerce.Model.Productos.Familia Madre)
        {
            if (Madre != null && Madre.Id != 0)
            {
                //txtSel.Text = NombreMadre;
                Madre.LoadFamiliasHijas();
                this.Items.Clear();
                this.Items.Add(new ListItem(Madre.ToString("."), Madre.Id.ToString()));
                if (Madre.TieneMadre)
                {
                    this.Items.Add(new ListItem("Volver a " + Madre.FamiliaMadre.Denominación, Madre.FamiliaMadre.Id.ToString()));
                }
                this.Items.Add(new ListItem("Volver al raiz", "X"));
                foreach (ECommerce.Model.Productos.Familia Familia in Madre.FamiliasHijas)
                {
                    //Familia.LoadFamiliasHijas();
                    string NombreFamilia = "";
                    if (Familia.TieneMadre)
                        NombreFamilia = Familia.FamiliaMadre.Denominación + "." + Familia.Denominación;
                    else
                        NombreFamilia = Familia.Denominación;
                    ListItem itemFamilia = new ListItem(NombreFamilia, Familia.Id.ToString());
                    this.Items.Add(itemFamilia);
                }
                this.FamiliaId = Madre.Id.ToString();
            }
            else 
            {
                this.Cargar();
            }
        }
        public string FamiliaId;
        public void Cargar()
        {
            ECommerce.Model.Productos.Familia[] Familias = ECommerce.DAO.SQL.Productos.Familia.GetFamiliasDelSistema();
            this.Items.Clear();
            this.AppendDataBoundItems = true;
            this.Items.Add(new ListItem("Seleccione una Familia", "0"));
            this.Cargar(Familias);
        }
        public void Cargar(ECommerce.Model.Productos.Familia[] Familias)
        {
            this.DataSource = Familias;
            this.DataMember = "Value";
            this.DataTextField = "Name";
            this.DataValueField = "Value";
            this.DataBind();
        }
        protected override void OnSelectedIndexChanged(EventArgs e)
        {
            if (this.SelectedValue!=null)
                if (this.SelectedValue!="")
                    if (this.SelectedValue == "0")
                    { }
                    else if (this.SelectedValue == "X")
                    {
                        int Id = Convert.ToInt32(this.FamiliaId);
                        ECommerce.Model.Productos.Familia Madre = ECommerce.DAO.SQL.Productos.Familia.GetFamiliaById(Id);
                        if (Madre.TieneMadre)
                        {
                            string NombreMadre = "";
                            Madre = ECommerce.DAO.SQL.Productos.Familia.GetFamiliaById(Madre.FamiliaMadre.Id);
                            if (Madre.TieneMadre)
                                NombreMadre = Madre.FamiliaMadre.Denominación + "." + Madre.Denominación + "(" + Madre.Id + ")";
                            else
                                NombreMadre = Madre.Denominación + "(" + Madre.Id + ")";

                            //txtSel.Text = NombreMadre;
                            Madre.LoadFamiliasHijas();
                            this.Items.Clear();
                            this.Items.Add(new ListItem(Madre.ToString("."), Madre.Id.ToString()));
                            this.Items.Add(new ListItem("Volver", "X"));
                            foreach (ECommerce.Model.Productos.Familia Familia in Madre.FamiliasHijas)
                            {
                                //Familia.LoadFamiliasHijas();
                                string NombreFamilia = "";
                                if (Familia.TieneMadre)
                                    NombreFamilia = Familia.FamiliaMadre.Denominación + "." + Familia.Denominación;
                                else
                                    NombreFamilia = Familia.Denominación;
                                ListItem itemFamilia = new ListItem(NombreFamilia, Familia.Id.ToString());
                                this.Items.Add(itemFamilia);
                            }
                            this.FamiliaId = Madre.Id.ToString();
                        }
                        else
                        {
                            this.Items.Clear();
                            //txtSel.Text = "";
                            this.Items.Add(new ListItem("Seleccione una Familia", "0"));
                            ECommerce.Model.Productos.Familia[] Familias = ECommerce.DAO.SQL.Productos.Familia.GetFamiliasDelSistema();
                            foreach (ECommerce.Model.Productos.Familia Familia in Familias)
                            {
                                //Familia.LoadFamiliasHijas();
                                string NombreFamilia = "";
                                if (Familia.TieneMadre)
                                    NombreFamilia = Familia.FamiliaMadre.Denominación + "." + Familia.Denominación;
                                else
                                    NombreFamilia = Familia.Denominación;
                                ListItem itemFamilia = new ListItem(NombreFamilia, Familia.Id.ToString());
                                this.Items.Add(itemFamilia);
                            }
                            this.FamiliaId = Madre.Id.ToString();
                        }
                    }
                    else
                    {
                        ECommerce.Model.Productos.Familia Madre = new ECommerce.Model.Productos.Familia();
                        Madre.Load(Convert.ToInt32(this.SelectedValue));

                        //txtSel.Text = NombreMadre;
                        Madre.LoadFamiliasHijas();
                        this.Items.Clear();
                        this.Items.Add(new ListItem(Madre.ToString("."), Madre.Id.ToString()));
                        if (Madre.TieneMadre)
                        {
                            this.Items.Add(new ListItem("Volver a " + Madre.FamiliaMadre.Denominación, Madre.FamiliaMadre.Id.ToString()));
                        }
                        this.Items.Add(new ListItem("Volver al raiz", "X"));
                        foreach (ECommerce.Model.Productos.Familia Familia in Madre.FamiliasHijas)
                        {
                            //Familia.LoadFamiliasHijas();
                            string NombreFamilia = "";
                            if (Familia.TieneMadre)
                                NombreFamilia = Familia.FamiliaMadre.Denominación + "." + Familia.Denominación;
                            else
                                NombreFamilia = Familia.Denominación;
                            ListItem itemFamilia = new ListItem(NombreFamilia, Familia.Id.ToString());
                            this.Items.Add(itemFamilia);
                        }
                        this.FamiliaId = Madre.Id.ToString();
                    }
            base.OnSelectedIndexChanged(e);
        }
    }
}
